#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
项目打包脚本
使用PyInstaller将鼠标键盘录制回放工具打包成exe文件

使用方法:
1. 确保已安装PyInstaller: pip install pyinstaller
2. 运行此脚本: python build_exe.py
"""

import os
import sys
import subprocess
import shutil
from pathlib import Path

def build_exe():
    """构建exe文件"""
    print("🚀 开始打包项目...")
    
    # 项目根目录
    project_dir = Path(__file__).parent
    
    # 清理之前的构建文件
    build_dir = project_dir / "build"
    dist_dir = project_dir / "dist"
    spec_file = project_dir / "main.spec"
    
    print("🧹 清理旧的构建文件...")
    if build_dir.exists():
        shutil.rmtree(build_dir)
    if dist_dir.exists():
        shutil.rmtree(dist_dir)
    if spec_file.exists():
        spec_file.unlink()
    
    # PyInstaller命令参数
    cmd = [
        "pyinstaller",
        "--onefile",                    # 打包成单个exe文件
        "--windowed",                   # 不显示控制台窗口
        "--name=操作录制器",             # 设置exe文件名
        "--icon=icon_control_hover.png", # 设置图标
        "--add-data=icon_control_hover.png;.",  # 包含图标文件
        "--add-data=scripts;scripts",    # 包含scripts目录
        "--add-data=config.json;.",     # 包含配置文件
        "--hidden-import=pynput",       # 确保pynput被包含
        "--hidden-import=pystray",      # 确保pystray被包含
        "--hidden-import=PIL",          # 确保PIL被包含
        "--hidden-import=tkinter",      # 确保tkinter被包含
        "--clean",                      # 清理临时文件
        "main.py"                       # 主程序文件
    ]
    
    print("📦 执行PyInstaller打包...")
    print(f"命令: {' '.join(cmd)}")
    
    try:
        # 执行打包命令
        result = subprocess.run(cmd, cwd=project_dir, capture_output=True, text=True)
        
        if result.returncode == 0:
            print("✅ 打包成功!")
            print(f"📁 exe文件位置: {dist_dir / '操作录制器.exe'}")
            
            # 复制必要文件到dist目录
            print("📋 复制必要文件...")
            
            # 创建scripts目录
            dist_scripts = dist_dir / "scripts"
            if not dist_scripts.exists():
                dist_scripts.mkdir()
            
            # 复制示例脚本
            src_scripts = project_dir / "scripts"
            if src_scripts.exists():
                for script_file in src_scripts.glob("*.json"):
                    shutil.copy2(script_file, dist_scripts)
            
            # 复制文档文件
            docs = [
                "使用说明文档.md",
                "开发说明文档.md",
                "悬浮窗使用说明.md",
                "系统托盘安装说明.md",
                "默认脚本功能说明.md"
            ]
            
            for doc in docs:
                doc_path = project_dir / doc
                if doc_path.exists():
                    shutil.copy2(doc_path, dist_dir)
            
            print("🎉 打包完成! 可以在dist目录中找到可执行文件。")
            
        else:
            print("❌ 打包失败!")
            print("错误输出:")
            print(result.stderr)
            
    except FileNotFoundError:
        print("❌ 错误: 未找到PyInstaller")
        print("请先安装PyInstaller: pip install pyinstaller")
        return False
    except Exception as e:
        print(f"❌ 打包过程中出现错误: {e}")
        return False
    
    return True

def create_installer_script():
    """创建安装脚本"""
    installer_content = '''@echo off
chcp 65001 >nul
echo 🎯 操作录制器 - 安装脚本
echo.
echo 正在创建桌面快捷方式...

set "exe_path=%~dp0操作录制器.exe"
set "desktop=%USERPROFILE%\\Desktop"
set "shortcut=%desktop%\\操作录制器.lnk"

powershell -Command "$WshShell = New-Object -comObject WScript.Shell; $Shortcut = $WshShell.CreateShortcut('%shortcut%'); $Shortcut.TargetPath = '%exe_path%'; $Shortcut.WorkingDirectory = '%~dp0'; $Shortcut.IconLocation = '%exe_path%'; $Shortcut.Save()"

if exist "%shortcut%" (
    echo ✅ 桌面快捷方式创建成功!
) else (
    echo ❌ 快捷方式创建失败
)

echo.
echo 📁 程序位置: %exe_path%
echo 📋 使用说明请查看同目录下的文档文件
echo.
pause
'''
    
    installer_path = Path(__file__).parent / "dist" / "安装.bat"
    installer_path.parent.mkdir(exist_ok=True)
    
    with open(installer_path, 'w', encoding='utf-8') as f:
        f.write(installer_content)
    
    print(f"📝 创建安装脚本: {installer_path}")

if __name__ == "__main__":
    print("🎯 操作录制器 - 项目打包工具")
    print("=" * 50)
    
    if build_exe():
        create_installer_script()
        print("\n🎊 所有任务完成!")
        print("\n📦 打包文件说明:")
        print("  - 操作录制器.exe: 主程序")
        print("  - scripts/: 脚本文件目录")
        print("  - *.md: 使用说明文档")
        print("  - 安装.bat: 创建桌面快捷方式")
    else:
        print("\n💥 打包失败，请检查错误信息")
        sys.exit(1)